//已 知 在 一 维 数 组 A （ m 十 n） 中 依次存 放 两 个 线 性 表 ( a 1 ， a 2 , a 3 ，...  ， a m ) 和 ( b 1 ，b 2， b 3，...,bn ) 。 
//编 写 一 个函数，将数组中两个顺序表的位置互换，即将(61，62，63 0...，3, ) 放在(4n 02, 03, ..., 0m) 的前面。
#include<iostream>
using namespace std;
#define MaxSize 50
#define ElemType int

struct List{
    ElemType data[MaxSize];
    int length;

    int InitList(List &L){
        L.length=0;
        return L.length;
    }

    int Length(List &L){
        return L.length;
    }

    bool ListInsert(List &L,int i,ElemType e){
        if(i<1||i>L.length+1){   //判断i的范围是否有效
            return false;
        }
        if(L.length>=MaxSize){   //当前存储空间已满，不能插入
            return false;
        }
        for (int j = L.length; j >= i; j--){ //将第i个元素及之后的元素后移
            L.data[j]=L.data[j-1];
        }
        L.data[i-1]=e;           //在第i个位置放入e
        L.length++;              //线性表长度加1
        return true;
        
    }
};

void revers(List &l,int left,int right){
    int tmp;
    int mid = (left+right)/2;
    for (int i = 0; i <= mid-left; i++)
    {
        tmp=l.data[left+i];
        l.data[left+i]=l.data[right-i];
        l.data[right-i]=tmp;
    }
}


int main(){
    List l;
    l.InitList(l);

    l.ListInsert(l,1,1);
    l.ListInsert(l,2,2);
    l.ListInsert(l,3,3);
    l.ListInsert(l,4,4);
    l.ListInsert(l,5,5);
    l.ListInsert(l,6,6);


    l.ListInsert(l,1,10);
    l.ListInsert(l,2,11);
    l.ListInsert(l,3,12);
    l.ListInsert(l,4,13);
    l.ListInsert(l,5,14);
    l.ListInsert(l,6,15);


    revers(l,0,l.length);
    revers(l,0,5);
    revers(l,6,l.length);



    return 0;
}